package com.shakespace.artofandroid.chapter06drawable

import android.graphics.*
import android.graphics.drawable.Drawable

/**
 *  Drawable 的作用比较单一 ，
 *  一个作为ImageView的图像，一个是View的背景。核心就是draw方法
 *
 *  通常没有必要自定义Drawable，因为自定义的drawable无法在xml中使用，降低了其使用范围。
 */
class MyDrawable() : Drawable() {

    val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
        color = Color.GREEN
    }

    override fun draw(canvas: Canvas) {
        canvas.drawCircle(
            bounds.exactCenterX(),
            bounds.exactCenterY(),
            Math.min(bounds.exactCenterX(), bounds.exactCenterY()),
            paint
        )
    }

    override fun setAlpha(alpha: Int) {
        paint.alpha = alpha
        invalidateSelf()
    }

    override fun getOpacity(): Int {
        return PixelFormat.TRANSLUCENT
    }

    override fun setColorFilter(colorFilter: ColorFilter?) {
        paint.colorFilter = colorFilter
        invalidateSelf()
    }

    /**
     * 有固有大小时需要重写以下两个方法，会影响view的wrap_content。 。
     * 比如带有图片，就可以使用图片的大小。
     * drawable的实际大小通过getBounds得到，通常和View的尺寸相同
     */
    override fun getIntrinsicHeight(): Int {
        return super.getIntrinsicHeight()
    }

    override fun getIntrinsicWidth(): Int {
        return super.getIntrinsicWidth()
    }
}